12-dars. Kichik loyiha qilish
Terminal Bankomad app qilish kerak
Darsning Maqsadlari:
- Turli xil dasturlash tushunchalari va strukturalarini o'rganish.
- Loyihalarda fayllar, dinamik xotira, strukturalar, funktsiyalar, char seriyalari, ikki o'lchovli massivlar va ko'rsatkichlar bilan ishlashni o'zlashtirish.
- Amaliy misollar yordamida tushunchalarni hayotiy vaziyatlarga tatbiq etish.
Fayllar (Matnli Fayllarga Ma'lumot Yozish)
Fayllar — ma'lumotlarni saqlash va ularga kirish imkonini beradi. Matnli fayllarga ma'lumot yozish jarayoni fopen, fclose, fputc, fputs, va fprintf funksiyalari yordamida amalga oshiriladi.
Amaliy Misol:
Biz foydalanuvchilar ro'yxatini saqlaydigan oddiy dastur yaratamiz:
#include <stdio.h>
int main() {
FILE *fayl;
fayl = fopen("foydalanuvchilar.txt", "w");
if (fayl == NULL) {
printf("Fayl ochilmadi!\\n");
return 1;
}
fprintf(fayl, "Ali\\nVali\\nHasan\\n");
fclose(fayl);
return 0;
}
fopenfaylni ochadi.fprintfesa faylga ma'lumot yozadi.
Dinamik Xotira Bilan Ishlash
Dinamik xotira dastur ishga tushganda kerakli joyni ajratishga imkon beradi. malloc, calloc, realloc, va free funksiyalaridan foydalanamiz.
Amaliy Misol:
Kichik dasturda foydalanuvchilar sonini dinamik ravishda belgilaymiz:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("Foydalanuvchilar sonini kiriting: ");
scanf("%d", &n);
char **foydalanuvchilar = (char **)malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
foydalanuvchilar[i] = (char *)malloc(50 * sizeof(char));
}
// Foydalanuvchilarni kiritamiz
for (int i = 0; i < n; i++) {
printf("Foydalanuvchi %d: ", i + 1);
scanf("%s", foydalanuvchilar[i]);
}
// Yozishni tugatgach, xotirani ozod qilamiz
for (int i = 0; i < n; i++) {
free(foydalanuvchilar[i]);
}
free(foydalanuvchilar);
return 0;
}
malloc— xotira ajratadi.free— ajratilgan xotirani ozod qiladi.
Struct va Union
Struct
struct — bir nechta o'zgaruvchilarni bir joyda saqlash imkonini beradi.
Misol:
struct Foydalanuvchi {
char ism[50];
int yosh;
};
Union
union esa bitta joyda bir nechta o'zgaruvchini saqlaydi, lekin faqat bittasi faol bo'lishi mumkin.
Misol:
union Malumot {
int son;
float kasr;
char belgi;
};
struct— har bir o'zgaruvchini alohida saqlaydi,unionesa joyni tejaydi.
Iterative va Recursive Funktsiyalar
Iterative Funktsiya
Takrorlanuvchi vazifalarni bajarish uchun foydalaniladi.
Misol:
int factorial(int n) {
int natija = 1;
for (int i = 1; i <= n; i++) {
natija *= i;
}
return natija;
}
Recursive Funktsiya
O'zini o'z ichiga olgan funktsiya.
Misol:
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
Recursive funktsiyalar ba'zan murakkab vazifalar uchun qulayroq bo'ladi, lekin xotira sarfi yuqori bo'lishi mumkin.
Char Seriyasi
Char seriyalari — belgilar to'plami bo'lib, matnlarni ifodalashda ishlatiladi. strcpy, strlen, va strcmp funksiyalari yordamida harakat qilamiz.
Misol:
char matn[100];
strcpy(matn, "Salom, dunyo!");
printf("%s\\n", matn);
strcpy— bir satrni boshqa satrga ko'chiradi.strlen— satr uzunligini hisoblaydi.
Ikki O'lchovli Seriya (Matrix)
Ikki o'lchovli seriyalar — matritsalar. Ularni o'qish va yozish uchun indekslar yordamida murojaat qilamiz.
Misol:
int matritsa[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("%d\n", matritsa[1][1]); // 5
Matritsalar ko'pincha statistik yoki matematik hisob-kitoblar uchun ishlatiladi.
Pointer Tushunchasi
Pointerlar — o'zgaruvchilarning manzillarini saqlaydigan o'zgaruvchilar.
Misol:
int a = 10;
int *p = &a;
printf("%d\n", *p); // 10
Pointerlar dasturda xotira boshqarishni soddalashtiradi, lekin noto'g'ri ishlatilganda xatoliklar yuzaga kelishi mumkin.
Bir O'lchovli Seriya (Massiv)
Bir o'lchovli seriyalar — o'zgaruvchilar to'plami. Ularni saqlash va foydalanish oson.
Misol:
int massiv[5] = {1, 2, 3, 4, 5};
printf("%d\n", massiv[2]); // 3
Massivlar bir xil turdagi ma'lumotlarni saqlashda juda qulaydir.
Xulosa
Bugun biz kichik loyiha yaratish jarayonida bir qator muhim dasturlash tushunchalarini o'rganib chiqdik. Har bir tushuncha dasturlashda zaruriy asoslarni ta'minlaydi va amaliyotda qo'llanishi mumkin.
Savollar:
- Fayl ochish uchun qanday funktsiyalardan foydalanamiz?
- Dinamik xotira qanday ishlaydi?
- Struct va union o'rtasidagi farq nima?
- Iterative va recursive funktsiyalar qanday farqlanadi?
- Pointerlar nima va qanday ishlatiladi?